package Java_BWS_Sample;
/*
* Copyright (c) 2013-2017 BlackBerry.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* It is a best practice to use Apache CXF 3.1.7 or later
*/
import com.rim.ws.enterprise.admin.*;
import java.io.IOException;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.WebServiceException;
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transport.http.HTTPException;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
/*
* SampleBwsClient.java
*
* A program that demonstrates BlackBerry Web Services (BWS) for Enterprise Administration APIs.
*
* This sample program demonstrates how to get system information to make an authenticated API call. If successful, the
* program then optionally creates a user and optionally displays the user's details. If the authenticated API is not
* successful, the program displays a message indicating that the failure has occurred.
*
*
* This program was tested against the BlackBerry Enterprise Service 10 version 10.2.0.
* This program was tested against the BlackBerry Enterprise Service 12 version 12.0.0 - 12.5.0.
* This program was tested against the BlackBerry Unified Endpoint Management version 12.6.0
*/
public class SampleBwsClient
{
// Values used in log messages.
final private static long NANOSECONDS_IN_A_MILLISECOND = 1000000L;
private static long startTime = System.nanoTime();
// Web service stubs.
private static BWSService _bwsService;
private static BWS _bws;
private static BWSUtilService _bwsUtilService;
private static BWSUtil _bwsUtil;
// The request Metadata information.
// This is the version of the WSDL used to generate the proxy, not the version of the server.
private final static String CLIENT_VERSION = "12.6.0";
/*
* To use a different locale, call getLocales() in the BWSUtilService web service
* to see which locales are supported.
*/
private final static String LOCALE = "en_US";
private final static String ORG_UID = "0";
private final static RequestMetadata REQUEST_METADATA = new RequestMetadata();
// Authentication type name.
private final static String AUTHENTICATOR_NAME = "BlackBerry Administration Service";
// Hostname to use when connecting to web service. Includes port
private static String BWS_HOST_NAME = null; // e.g. BWS_HOST_NAME = "server01.yourcompany.net:18084".
private static String USERNAME = null; // e.g. USERNAME = "admin".
private static String PASSWORD = null; // e.g. PASSWORD = "password".
// Email address used to create a new user with the createUsers() API call.
private static String CREATE_NEW_USER_EMAIL = null;
// Email address used to identify the user to find with the getUsersDetail() API call.
private static String DISPLAY_USER_DETAIL_EMAIL = null;
/*******************************************************************************************************************
*
* Initialize the BWS and BWSUtil services.
*
* @return Returns true when the setup is successful, and false otherwise.
*
*******************************************************************************************************************
*/
private static boolean setup()
{
final String METHOD_NAME = "setup()";
logMessage("Entering %s", METHOD_NAME);
boolean returnValue = false;
REQUEST_METADATA.setClientVersion(CLIENT_VERSION);
REQUEST_METADATA.setLocale(LOCALE);
REQUEST_METADATA.setOrganizationUid(ORG_UID);
URL bwsServiceUrl = null;
URL bwsUtilServiceUrl = null;
try
{
// These are the URLs that point to the web services used for all calls.
bwsServiceUrl = new URL("https://" + BWS_HOST_NAME + "/enterprise/admin/ws");
bwsUtilServiceUrl = new URL("https://" + BWS_HOST_NAME + "/enterprise/admin/util/ws");
}
catch (MalformedURLException e)
{
logMessage("Cannot initialize web service URLs");
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
// Initialize the BWS web service stubs that will be used for all calls.
logMessage("Initializing BWS web service stub");
QName serviceBWS = new QName("http://ws.rim.com/enterprise/admin", "BWSService");
QName portBWS = new QName("http://ws.rim.com/enterprise/admin", "BWS");
_bwsService = new BWSService(null, serviceBWS);
_bwsService.addPort(portBWS, "http://schemas.xmlsoap.org/soap/", bwsServiceUrl.toString());
_bws = _bwsService.getPort(portBWS,BWS.class);
logMessage("BWS web service stub initialized");
logMessage("Initializing BWSUtil web service stub");
QName serviceUtil = new QName("http://ws.rim.com/enterprise/admin", "BWSUtilService");
QName portUtil = new QName("http://ws.rim.com/enterprise/admin", "BWSUtil");
_bwsUtilService = new BWSUtilService(null, serviceUtil);
_bwsUtilService.addPort(portUtil, "http://schemas.xmlsoap.org/soap/", bwsUtilServiceUrl.toString());
_bwsUtil = _bwsUtilService.getPort(portUtil, BWSUtil.class);
logMessage("BWSUtil web service stub initialized");
// Set the connection timeout to 60 seconds.
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(60000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(60000);
Client client = ClientProxy.getClient(_bws);
HTTPConduit http = (HTTPConduit) client.getConduit();
http.setClient(httpClientPolicy);
client = ClientProxy.getClient(_bwsUtil);
http = (HTTPConduit) client.getConduit();
http.setClient(httpClientPolicy);
Authenticator authenticator = getAuthenticator(AUTHENTICATOR_NAME);
if (authenticator != null)
{
String encodedUsername = getEncodedUserName(USERNAME, authenticator);
if (encodedUsername != null && !encodedUsername.isEmpty())
{
/*
* Set the HTTP basic authentication on the BWS service.
* BWSUtilService is a utility web service that does not require
* authentication.
*/
BindingProvider bp = (BindingProvider) _bws;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, encodedUsername);
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, PASSWORD);
returnValue = true;
}
else
{
logMessage("'encodedUsername' is null or empty");
}
}
else
{
logMessage("'authenticator' is null");
}
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
/*******************************************************************************************************************
*
* Get the authenticator object for the authenticator name.
*
* @param authenticatorName
* A string containing the name of the desired authenticator.
* @return Returns the requested authenticator if it is found, null otherwise.
*
*******************************************************************************************************************
*/
public static Authenticator getAuthenticator(String authenticatorName)
{
final String METHOD_NAME = "getAuthenticator()";
final String BWS_API_NAME = "_bwsUtil.getAuthenticators()";
logMessage("Entering %s", METHOD_NAME);
Authenticator returnValue = null;
GetAuthenticatorsRequest request = new GetAuthenticatorsRequest();
request.setMetadata(REQUEST_METADATA);
GetAuthenticatorsResponse response=null;
try
{
logRequest(BWS_API_NAME);
response = _bwsUtil.getAuthenticators(request);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
if (response.getAuthenticators() != null && !response.getAuthenticators().isEmpty())
{
for (Authenticator authenticator : response.getAuthenticators())
{
if (authenticator.getName().equalsIgnoreCase(authenticatorName))
{
returnValue = authenticator;
break;
}
}
if (returnValue == null)
{
logMessage("Could not find \"%s\" in GetAuthenticatorsResponse", authenticatorName);
}
}
else
{
logMessage("No authenticators in GetAuthenticatorsResponse");
}
}
else
{
logMessage( "Error Message: \"%s\"", response.getReturnStatus().getMessage());
}
logMessage("Exiting %s with %s", METHOD_NAME, returnValue == null ? "\"null\""
: "Authenticator object (Name \"" + returnValue.getName() + "\")");
return returnValue;
}
/*******************************************************************************************************************
*
* Get the encoded username required to authenticate user to BWS.
*
* @param username
* A string containing the username to encode.
* @param authenticator
* The authenticator.
* @return Returns a string containing the encoded username if successful, and a null message string otherwise.
*
*******************************************************************************************************************
*/
public static String getEncodedUserName(String username, Authenticator authenticator)
{
final String METHOD_NAME = "getEncodedUserName()";
final String BWS_API_NAME = "_bwsUtil.getEncodedUsername()";
logMessage("Entering %s", METHOD_NAME);
String returnValue = null;
GetEncodedUsernameRequest request = new GetEncodedUsernameRequest();
request.setMetadata(REQUEST_METADATA);
request.setUsername(username);
request.setOrgUid(REQUEST_METADATA.getOrganizationUid());
request.setAuthenticator(authenticator);
CredentialType credentialType = new CredentialType();
credentialType.setPASSWORD(true);
credentialType.setValue("PASSWORD");
request.setCredentialType(credentialType);
GetEncodedUsernameResponse response=null;
try
{
logRequest(BWS_API_NAME);
response = _bwsUtil.getEncodedUsername(request);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
returnValue = response.getEncodedUsername();
}
else
{
logMessage("Error Message: \"%s\"", response.getReturnStatus().getMessage());
}
if (Base64.isBase64(returnValue))
{
logMessage("Decoded value of encoded username \"%s\"",
StringUtils.newStringUtf8(Base64.decodeBase64(returnValue)));
}
else
{
logMessage("Value of encoded username \"%s\"", returnValue);
}
logMessage("Exiting %s", METHOD_NAME);
return returnValue;
}
/*******************************************************************************************************************
*
* Retrieves a single user using an email address. If more or less than one result is found, that is treated as an
* error.
*
* @return Returns a User object if user is found, and null otherwise.
*
*******************************************************************************************************************
*/
public static User getUser()
{
final String METHOD_NAME = "getUser()";
final String BWS_API_NAME = "_bws.getUsers()";
logMessage("Entering %s", METHOD_NAME);
User returnValue = null;
GetUsersRequest request = new GetUsersRequest();
request.setMetadata(REQUEST_METADATA);
GetUsersSearchCriteria searchCriteria = new GetUsersSearchCriteria();
// Search for a user by emailAddress
searchCriteria.setEmailAddress(DISPLAY_USER_DETAIL_EMAIL);
request.setSearchCriteria(searchCriteria);
/*
* The pageSize value of 2 is used to help determine if exactly 1 user was found. Using a pageSize value
* of 2 avoids the overhead of retrieving more than 2 search results.
*/
request.setPageSize(2);
GetUsersSortBy sortBy = new GetUsersSortBy();
sortBy.setEMAILADDRESS(true);
sortBy.setValue("EMAIL_ADDRESS");
request.setSortBy(sortBy);
GetUsersResponse response=null;
try
{
logRequest(BWS_API_NAME);
response = _bws.getUsers(request);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
if (response.getUsers() != null && response.getUsers().size() == 1)
{
// Returns the first user object in the users list.
returnValue = response.getUsers().get(0);
}
else if (response.getUsers() != null && response.getUsers().size() > 1)
{
// Returns the first user object in the users list.
returnValue = response.getUsers().get(0);
logMessage("More than one user was found with email address search criteria \"%s\", first user result" +
" will be used.", DISPLAY_USER_DETAIL_EMAIL);
}
else
{
logMessage("No user was found with email address \"%s\"", DISPLAY_USER_DETAIL_EMAIL);
}
}
else
{
logMessage( "Error Message: \"%s\"", response.getReturnStatus().getMessage());
}
logMessage("Exiting %s with %s", METHOD_NAME, returnValue == null ? "\"null\"" : "User object (UID \""
+ returnValue.getUid() + "\")");
return returnValue;
}
/*******************************************************************************************************************
*
* Retrieve and display some user details.
*
* @return Returns true if getUsersDetail is successful, and false otherwise.
*
*******************************************************************************************************************
*/
public static boolean displayUserDetails()
{
final String METHOD_NAME = "displayUserDetails()";
final String BWS_API_NAME = "_bws.getUsersDetail()";
logMessage("Entering %s", METHOD_NAME);
boolean returnValue = false;
logMessage("Displaying details for user with email address \"%s\"", DISPLAY_USER_DETAIL_EMAIL);
// Getting the user object.
User user = getUser();
if (user == null)
{
logMessage("'user' is null");
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
GetUsersDetailRequest request = new GetUsersDetailRequest();
request.setMetadata(REQUEST_METADATA);
/*
* To help improve API performance, load only the required details.
* By default all load flags are set to false.
*/
request.setLoadAccounts(true);
request.setLoadDevices(true);
request.setLoadITPolicies(true);
request.getUsers().add(user);
GetUsersDetailResponse response=null;
try{
logRequest(BWS_API_NAME);
response = _bws.getUsersDetail(request);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
if (response.getIndividualResponses() != null && response.getIndividualResponses().size() == 1)
{
for (GetUsersDetailIndividualResponse individualResponse : response.getIndividualResponses())
{
UserDetail userDetail = individualResponse.getUserDetail();
displayResult("User details:");
// The values of the fields, and whether they will be populated or not, depends on the device type.
displayResult("Display Name: %s", userDetail.getDisplayName());
displayResult("User UID: %s", individualResponse.getUserUid());
// Displays time in UTC format.
displayResult("Last Login Time: %s", userDetail.getLastLoginTime());
if (userDetail.getIndirectITPolicies() != null && !userDetail.getIndirectITPolicies().isEmpty())
{
StringBuilder policyString = new StringBuilder();
for (IndirectITPolicy indirectITPolicy : userDetail.getIndirectITPolicies())
{
if (policyString.length() > 0)
{
policyString.append(", ");
}
policyString.append(indirectITPolicy.getItPolicy().getPolicy().getName());
}
displayResult("Indirect IT policy names: %s", policyString);
}
if (userDetail.getDirectITPolicy() != null && userDetail.getDirectITPolicy().getPolicy() != null)
{
displayResult("Direct IT policy name: %s", userDetail.getDirectITPolicy().getPolicy().getName());
}
/*
* The BWS object model supports multiple accounts and devices. However, BlackBerry Enterprise Server 5.0.x
* will only return at most one object in the userDetail.getDevices() list, and at most one object in the
* userDetail.getAccounts() list.
*/
if (userDetail.getDevices() != null && !userDetail.getDevices().isEmpty())
{
displayResult("User's device details:");
int deviceIndex = 1;
for (Device device : userDetail.getDevices())
{
displayResult("Device %d data", (deviceIndex++));
displayResult("---------------");
displayResult("PIN: %s", device.getPin());
displayResult("Model: %s", device.getModel());
displayResult("Phone Number: %s", device.getPhoneNumber());
displayResult("Active Carrier: %s", device.getActiveCarrier());
displayResult("Serial Number: %s", device.getSerialNumber());
displayResult("State: %s", device.getState().getValue());
displayResult("IT Policy Name: %s", device.getItPolicyName());
displayResult("Platform Version: %s", device.getPlatformVersion());
displayResult("---------------");
}
}
if (userDetail.getAccounts() != null && !userDetail.getAccounts().isEmpty())
{
displayResult("User's account details:");
int accountIndex = 1;
for (Account account : userDetail.getAccounts())
{
displayResult("Account %d data", (accountIndex++));
displayResult("---------------");
displayResult("Email Address: %s", account.getEmailAddress());
displayResult("---------------");
}
}
}
returnValue = true;
}
else if (response.getIndividualResponses() != null && response.getIndividualResponses().size() > 1)
{
logMessage("More than one user was found with userUid \"%s\"", user.getUid());
}
else
{
logMessage("No user was found with userUid \"%s\"", user.getUid());
}
}
else
{
logMessage( "Error Message: \"%s\"", response.getReturnStatus().getMessage());
if (response.getIndividualResponses() != null)
{
for (GetUsersDetailIndividualResponse individualResponse : response.getIndividualResponses())
{
logMessage("User UID: \"%s\"", individualResponse.getUserUid());
logMessage( "Individual Response - Code: \"%s\", Message: \"%s\"",
individualResponse.getReturnStatus().getCode(),
individualResponse.getReturnStatus().getMessage());
}
}
}
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
/*******************************************************************************************************************
*
* Creates a user using an email address.
*
* @return Returns true if createUsers is successful, and false otherwise.
*
*******************************************************************************************************************
*/
public static boolean createUser()
{
final String METHOD_NAME = "createUser()";
final String BWS_API_NAME = "_bws.createUsers()";
logMessage("Entering %s", METHOD_NAME);
boolean returnValue = false;
// Create the request object.
CreateUsersRequest createUsersRequest = new CreateUsersRequest();
createUsersRequest.setMetadata(REQUEST_METADATA);
NewUser newUser = new NewUser();
// To create an administrator user, create and set the "UserAttributes" and the roleUid field.
AccountAttributes accountAttributes = new AccountAttributes();
logMessage("Email address set to \"%s\"", CREATE_NEW_USER_EMAIL);
// Value of the variable "CREATE_NEW_USER_EMAIL" is used to create a device-enabled user.
accountAttributes.setEmailAddress(CREATE_NEW_USER_EMAIL);
newUser.setAccountAttributes(accountAttributes);
// Server value is validated and then ignored.
newUser.setServer(null);
createUsersRequest.getNewUsers().add(newUser);
CreateUsersResponse response=null;
try
{
logRequest(BWS_API_NAME);
response = _bws.createUsers(createUsersRequest);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
if (response.getIndividualResponses() != null)
{
for (IndividualResponse individualResponse : response.getIndividualResponses())
{
displayResult("User created with UID \"%s\"",
individualResponse.getUid());
displayResult("Email address used in creation is \"%s\"",
accountAttributes.getEmailAddress());
}
returnValue = true;
}
}
else
{
logMessage( "Error Message: \"%s\"", response.getReturnStatus().getMessage());
if (response.getIndividualResponses() != null)
{
for (IndividualResponse individualResponse : response.getIndividualResponses())
{
logMessage( "Individual Response - Code: \"%s\", Message: \"%s\"",
individualResponse.getReturnStatus().getCode(),
individualResponse.getReturnStatus().getMessage());
}
}
}
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
/*******************************************************************************************************************
*
* Call _bwsService.getSystemInfo() and display the returned properties.
*
* @return Returns true if getSystemInfo is successful, and false otherwise.
*
*******************************************************************************************************************
*/
public static boolean getSystemInfo()
{
final String METHOD_NAME = "getSystemInfo()";
final String BWS_API_NAME = "_bws.getSystemInfo()";
logMessage("Entering %s", METHOD_NAME);
boolean returnValue = false;
GetSystemInfoRequest request = new GetSystemInfoRequest();
/*
* Setting the value of loadAuthenticatedUserProperties to true will cause the API to return additional
* properties about the current user, like the Authenticated User Uid property. The Authenticated User Uid
* property is often used to make calls to APIs like getUsersDetail(), assignSWConfigsToGroup() and
* others.
*
* Valid for BlackBerry Enterprise Server 5.0.3 MR5 or later
*/
request.setLoadAuthenticatedUserProperties(true);
request.setMetadata(REQUEST_METADATA);
GetSystemInfoResponse response = null;
/*
* The try catch block here is used to illustrate how to handle a specific type of exception.
* For example, in this case we check to see if the error was caused by invalid credentials.
*/
try
{
logRequest(BWS_API_NAME);
response = _bws.getSystemInfo(request);
logResponse(BWS_API_NAME, response.getReturnStatus().getCode(), response.getMetadata());
}
catch (WebServiceException e)
{
if (e.getCause() instanceof HTTPException)
{
HTTPException httpException = (HTTPException) e.getCause();
// Handle authentication failure.
if (httpException != null && httpException.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
{
logMessage("Failed to authenticate with the BWS web service");
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
}
// Log and re-throw exception.
logMessage("Exiting %s with exception \"%s\"", METHOD_NAME, e.getMessage());
throw e;
}
if (response.getReturnStatus().getCode().equals("SUCCESS"))
{
if (response.getProperties() != null && !response.getProperties().isEmpty())
{
logMessage("%s returned the following properties:", BWS_API_NAME);
for (Property property : response.getProperties())
{
displayResult("%s: %s", property.getName(), property.getValue());
}
returnValue = true;
}
else
{
logMessage("No properties in response");
}
}
else
{
System.err.format( "Error: Code: \"%s\", Message: \"%s\"%n", response.getReturnStatus().getCode(),
response.getReturnStatus().getMessage());
}
logMessage("Exiting %s with value \"%s\"", METHOD_NAME, returnValue);
return returnValue;
}
/*******************************************************************************************************************
*
* Creates a string containing the elapsed time since the program started.
* The execution time will be reset to 00:00.000 if the execution time exceeds an hour.
*
* @return Returns the elapsed time from start of program.
*
*******************************************************************************************************************
*/
public static String logTime()
{
DateFormat dateFormat = new SimpleDateFormat("mm:ss.SSS");
long timeDifference = System.nanoTime()-startTime;
long dateTime = (timeDifference/NANOSECONDS_IN_A_MILLISECOND);
String time=dateFormat.format(dateTime);
return time;
}
/*******************************************************************************************************************
*
* Prints a log message to stderr.
* Appends the message to a string containing the elapsed time of the program.
*
* @param format - A string which formats how args will be displayed in the message.
* @param args - List of objects to be displayed in the message.
*
*******************************************************************************************************************
*/
public static void logMessage(String format, Object... args){
//Change output stream if desired
PrintStream logStream=System.err;
logStream.format(logTime()+" "+format+"%n", args);
}
/*******************************************************************************************************************
*
* Prints results to stderr.
*
* @param format - A string which formats how args will be displayed in the message.
* @param args - List of objects to be displayed in the message.
*
*******************************************************************************************************************
*/
public static void displayResult(String format, Object... args){
//Change output stream if desired
PrintStream resultStream=System.err;
for(Object arg: args){
//Do not display null values
if(arg == null){
return;
}
}
resultStream.format(format+"%n", args);
}
/*******************************************************************************************************************
*
* Logs the calling of an API.
*
* @param BWS_API_NAME - A string of the API called.
*
*******************************************************************************************************************
*/
public static void logRequest(String BWS_API_NAME){
logMessage("Calling %s...", BWS_API_NAME);
}
/*******************************************************************************************************************
*
* Logs various information about an API response.
*
* @param BWS_API_NAME - A string of the API called.
* @param code - The return code from the API called.
* @param metadata - The metadata contained in the response object returned from the API called.
*
*******************************************************************************************************************
*/
public static void logResponse(String BWS_API_NAME, String code, ResponseMetadata metadata){
logMessage("...%s returned \"%s\"", BWS_API_NAME, code);
if (metadata != null)
{
/*
* Converting metadata.getExecutionTime() (which is in nano-seconds) into seconds by
* multiplying it by 10^-9.
*/
logMessage("Execution Time: %.4f seconds", (metadata.getExecutionTime() * Math.pow(10, -9)));
logMessage("Request UID: %s", metadata.getRequestUid());
}
}
/*******************************************************************************************************************
*
* The main method.
*
* @param args
* not used.
* @throws IOException
* if it fails to create log files.
*
*******************************************************************************************************************
*/
public static void main(String[] args) throws IOException
{
// Return codes
final int SUCCESS = 0;
final int FAILURE = 1;
int returnCode = SUCCESS;
/*
* Flags that are used to determine whether or not
* createUser() and displayUserDetails() get called.
*/
boolean createNewUser = false;
boolean displayUserDetails = true;
// Hostname to use when connecting to web service. Includes port
BWS_HOST_NAME = "<BWSHostName>"; // e.g. BWS_HOST_NAME = "server01.yourcompany.net:18084".
USERNAME = "<username>"; // e.g. USERNAME = "admin".
PASSWORD = "<password>"; // e.g. PASSWORD = "password".
/*
* Email address used to create a new user with the createUsers() API call.
* This value must exactly match the full string value in the directory for successful user creation.
*/
CREATE_NEW_USER_EMAIL = "user02@example.net";
// Email address used to identify the user to find with the getUsersDetail() API call.
DISPLAY_USER_DETAIL_EMAIL = "user01@example.net";
/*
* BWS Host certificate must be installed on the client machine before running this sample code, otherwise
* a SSL/TLS secure channel error will be thrown. For more information, see the BlackBerry Web Services for
* Enterprise Administration For Java Developers Getting Started Guide.
*/
try
{
logMessage("Initializing web services...");
if (setup())
{
/*
* Demonstrate call to _bws.getSystemInfo() API.
* This is also the first authenticated call in the client application.
*/
logMessage("Getting system information...");
if (getSystemInfo())
{
if (createNewUser)
{
// Demonstrate call to _bws.createUsers() API.
logMessage("Creating a user...");
if (!createUser())
{
logMessage("Error: createUser() failed");
returnCode = FAILURE;
}
}
if (displayUserDetails)
{
// Demonstrate call to _bws.getUsers() and _bws.getUsersDetail() APIs.
logMessage("Displaying a user's details...");
if (!displayUserDetails())
{
logMessage("Error: displayUserDetails() failed");
returnCode = FAILURE;
}
}
}
else
{
logMessage("Error: getSystemInfo() failed");
returnCode = FAILURE;
}
}
else
{
logMessage("Error: setup() failed");
returnCode = FAILURE;
}
}
catch (Exception e)
{
System.err.format("Exception: \"%s\"\n", e.getMessage());
returnCode = FAILURE;
}
System.err.format("Press Enter to exit\n");
System.in.read();
System.exit(returnCode);
}
}